//默认向外导出
export default {
	//开启命名空间
	namespaced: true,
	//模块的state数据
	state: {
		// 购物车的数组，用来存储购物车中每个商品的信息对象
		// 每个商品的信息对象，都包含如下 6 个属性：
		// { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
		cart: JSON.parse(uni.getStorageSync('cart') || '[]'),
		test: "看看能不能看到这个值",
	},
	//模块的mutations方法
	mutations: {
		//删除购物车里面的方法
		delGoods(state, goods_id) {
			//使用过滤器，将goods_id对应的商品过滤掉
			state.cart = state.cart.filter(item => item.goods_id !== goods_id)
			//提交修改结果
			this.commit('m_cart/addToStorage')
		},
		//改变购物车里面每个商品项的数量的方法
		updateGoodsNum(state, goods) {
			//根据传入的id查找具体的商品
			const rs = state.cart.find(item => item.goods_id === goods.goods_id)
			if (rs) {
				rs.goods_count = goods.goods_count
				//提交修改结果
				this.commit('m_cart/addToStorage')
			}
		},
		//改变购物车里面每个物品的选中的方式
		updateGoodsState(state, goods) {
			//根据传入的goods_id查找对应的商品
			const findRs = state.cart.find(x => x.goods_id === goods.goods_id)
			//如果找到就进行修改
			if (findRs) {
				//修改选中状态
				findRs.goods_state = goods.goods_state
				//提交结果
				this.commit('m_cart/addToStorage')
			}
		},
		//将商品增加到购物车的方法
		addToCart(state, goods) {
			//先判断cart数组里面有没有goods对象
			const findResult = state.cart.find(item => item.goods_id === goods.goods_id)
			// console.log("查找商品的结果",findResult);
			//如果cart里面没有找到
			if (!findResult) {
				//没找到就将这个对象加到cart数组里面
				state.cart.push(goods)
			} else {
				//如果cart数组中已经存在了，就对数量加一
				findResult.goods_count++
			}
			// console.log("目前的cart数组中的情况",state.cart);
			//在购物车的数量发生变更后，更改本地数据
			this.commit('m_cart/addToStorage')
		},
		//将购物车里面的数据持久化存储到本地
		addToStorage(state) {
			//调用uni,将cart数组里面的值存储到本地存储
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		},
		//更新所有商品的勾选状态
		updAllGoodsState(state, newStatus) {
			//更改所有商品的状态
			state.cart.forEach(item => item.goods_state = newStatus)
			//将购物车里面的数据持久化存储到本地
			this.commit('m_cart/addToStorage')
		},

	},
	//模块的actions方法
	actions: {

	},
	//模块的getters方法
	getters: {
		//购物车里面商品数量的变化
		total(state) {
			//将计算的总数返回
			return state.cart.filter(item=>item.goods_state).reduce((total, item) => total += item.goods_count, 0)
		},
		//购物车结算时累加数量
		checkedCount(state) {
			//过滤出被选中的     累加被选中的count属性 
			return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
		},
		//已勾选的商品的总价
		checkedGoodsAmount(state) {
			//过滤出被选中的   计算选中的数量和价格的乘积，最终保留小数点后两位
			return state.cart.filter(x => x.goods_state)
				.reduce((total, item) => total += item.goods_price * item.goods_count, 0)
				.toFixed(2)
		},

	}
}
